package com.example.demo.flux;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.HandlerMapping;
import org.springframework.web.reactive.handler.SimpleUrlHandlerMapping;
import org.springframework.web.reactive.socket.server.support.WebSocketHandlerAdapter;

import java.util.HashMap;
import java.util.Map;


/**
 * 配置基于WebFlux的WebSocket
 */
@Configuration
public class WebSocketConfig {
    /**
     * 这个bean负责对容器中所有的 WebSocketHandler Bean 进行适配
     *
     * @return
     */
    @Bean
    public WebSocketHandlerAdapter webSocketHandlerAdapter() {
        return new WebSocketHandlerAdapter();
    }

    /**
     * MyWebSocketHandler 会接受容器中的依赖注入
     *
     * @param myWebSocketHandler
     * @return
     */
    @Bean
    public HandlerMapping handlerMapping(MyWebSocketHandler myWebSocketHandler) {
        // 定义 URL 与 WebSocketHandler Bean 之间的映射关系
        // 就是向这个 /myWebSocket 地址发送请求的时候，就将这个请求交给这个 myWebSocketHandler 处理类进行处理
        Map<String, Object> map = new HashMap<>();
        map.put("/myWebSocket/{name}", myWebSocketHandler);
        // 参数1：指定 URL 和 Handler 之间的映射关系  ，  参数2：就是优先级
        SimpleUrlHandlerMapping simpleUrlHandlerMapping = new SimpleUrlHandlerMapping(map, -1);
        return simpleUrlHandlerMapping;
    }

}


